package com.zmc.lostfound.common.valid;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @author ZMC
 * @description 自定义注解校验器
 */
public class ValueStringListConstraintValidator implements ConstraintValidator<ValueStringList, String> {

    /**
     * 存放values
     */
    private final Set<String> set = new HashSet<>();

    /**
     * 注解初始化方法
     */
    @Override
    public void initialize(ValueStringList constraintAnnotation) {
        String[] values = constraintAnnotation.values();
        if (values.length > 0) {
            set.addAll(Arrays.asList(values));
        }
    }

    /**
     * 判断是否校验成功
     *
     * @param str                        待校验数据
     * @param constraintValidatorContext 校验上下文信息
     * @return 校验结果
     */
    @Override
    public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
        // 当传入数据为null时，可以通过校验
        // 因为MP自带的update功能是动态SQL，属性值为null时不会将数据库对应的字段值修改为null
        if (str == null) {
            return true;
        }
        return set.contains(str);
    }

}
